﻿/* PC INpact Toolkit for Chrome™

	PC INpact Toolkit for Chrome™ est une extension destinée au navigateur Chrome permettant d'accéder à de nombreuses fonctionnalités de PC INpact.
	Vous y retrouverez les actualités, brèves, calendriers du site, mais aussi les comptes Twitter de l'équipe ou des fonctionnalités de recherche.
	Des notifications peuvent aussi être affichées sur votre bureau, à chaque nouvelle publication sur le site (actualités, dossiers, tests).

	Main author : LEGRAND David
	Mail : david@pcinpact.com
	
	Google Code Project : http://pci.im/code-pci-chrome 
	Forum : http://pci.im/forum-pci-chrome
	
    This file is part of PC INpact Toolkit for Chrome™.

    PC INpact Toolkit for Chrome™ is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    PC INpact Toolkit for Chrome™ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with PC INpact Toolkit for Chrome™.  If not, see <http://www.gnu.org/licenses/>. 

    You're not allowed to use PC INpact Toolkit for Chrome™ name or logo without permission 

	Loading GIF : http://www.ajaxload.info/

 */

// La fonction qui récupère la timeline
function get_twitter_timeline(responseXML)
{
	doc = responseXML.documentElement;
	
	// On récupère le nom de l'utilisateur
	var twitter_titre = doc.getElementsByTagName("description")[0].childNodes[0].nodeValue.replace("Twitter updates from ", "");
	var twitter_name = twitter_titre.split(/ \/ /);

	// On créé le titre
	var fils = "<div class='tweet_titre'>Flux de " + twitter_name[0] + "</div>";

	// Pour chaque Tweet du flux RSS, on effectue un travail sur la mise en page
	for(var h = 1; h < doc.getElementsByTagName("item").length; h++)
	{
		// On supprime le nom de l'utilisateur au début de chaque Tweet
		// On ajoute aussi des balises <a> sur les liens, les # et les @
		var tweet = doc.getElementsByTagName("title")[h].childNodes[0].nodeValue
						.replace(/^labdampci:|^seb_pci:|^pci_labs:|^pcinpact:|^davidpci:|^reesmarc:|^NilSanyas:|^pa_pci:|^Vincent_Hermann:|^pci_rss:/gi,"")
						.replace(/(\w+):\/\/[\S]+(\b|$)/gim,'<a href="$&" target="_blank">$&</a>')
						.replace(/(^|\s)#(\w+)/g,"$1#<a href=\"http://search.twitter.com/search?q=%23$2\" target=\"_blank\">$2</a>")
						.replace(/(^|\s)@(\w+)/g, "$1@<a href=\"http://www.twitter.com/$2\" target=\"_blank\">$2</a>");
		
		// On récupère la date du tweet
		var tweet_date = new Date(doc.getElementsByTagName("pubDate")[h].childNodes[0].nodeValue);
		var final_date = tweet_date

		// On rajoute le tweet dans un div spécifique
		fils += "<div class='tweet'>" + tweet + "<br /><div style='font-size: 0.8em; margin-top: 5px;'>" + final_date + "</div></div>";
	}

	// On ajoute un lien vers la page Twitter de l'utilisateur en fin de page
	fils += "<div class='tweet_titre_last'><a class=\"head\" href=\"http://twitter.com/" + twitter_name[1].replace('.', '') + "\" target=\"_blank\">Voir l'ensemble du flux</a></div>";

	// On renvoie le résultat
	return fils;
}

// La fonction qui récupère le nom de l'utilisateur dont il faut traiter la timeline
function get_twitter_name(name)
{
	// on récupère le nom du compte twitter stockée
	var name_s = window.localStorage.getItem('twitt_name_s');

	// On passe le nom à utiliser en paramètre, s'il n'existe pas, on utilise une valeur par défaut
	// Si aucune n'est stockée, on utilise pcinpact comme compte par défaut
	if(!name) {
		if(name_s != null) var name = name_s;
		else var name = "pcinpact";
	}
	
	// On enregistre la valeur finale
	window.localStorage.setItem('twitt_name_s', name);

	// On renvoie la valeur finale
	return name;
}

// La fonction qui traite le flux Twitter
function twitter(name) 
{
	window.localStorage.setItem('last_rub_s', 'twitter');
	modify_body_size('scroll');

	// On récupère un élément temporel
	var d = new Date();

	// On définit les variables, par défaut on place le compte de PCi
	var name_final = get_twitter_name(name);
	var url = "http://twitter.com/statuses/user_timeline/14813709.rss"
	
	// On affiche le sous menu
	document.getElementById("ss_menu").innerHTML = "<a href=\"\" onclick=\"twitter('damien')\">Damien</a> | " + "<a href=\"\" onclick=\"twitter('david')\">David</a> | " + " <a href=\"\" onclick=\"twitter('marc')\">Marc</a> | " + " <a href=\"\" onclick=\"twitter('nil')\">Nil</a> | " + " <a href=\"\" onclick=\"twitter('pa')\">P-A</a> | " + " <a href=\"\" onclick=\"twitter('seb')\">Séb</a> | " + " <a href=\"\" onclick=\"twitter('vincent')\">Vincent</a> || " + " <a href=\"\" onclick=\"twitter('pcinpact')\">PCi</a> | " + " <a href=\"\" onclick=\"twitter('pci_labs')\">Labs</a> || " + " <a href=\"http://twitter.com/pcinpact/team\" target=\"_blank\">Team</a>" + " <br /><br />";

	// Si le cache est supérieur au délai fixé, on effectue la requête
	if ((d.getTime() - window.localStorage.getItem('twitter_' + name_final + '_cache_time') > window.localStorage.getItem('cache_delay') * 60 * 1000))
	{
			
		// On remplit le tableau d'équivalence
		var comptes_url = new Array();
		comptes_url["damien"] = "http://twitter.com/statuses/user_timeline/64710636.rss";
		comptes_url["david"] = "http://twitter.com/statuses/user_timeline/17512413.rss";
		comptes_url["marc"] = "http://twitter.com/statuses/user_timeline/20474834.rss";
		comptes_url["nil"] = "http://twitter.com/statuses/user_timeline/81221767.rss";
		comptes_url["pa"] = "http://twitter.com/statuses/user_timeline/83091138.rss";
		comptes_url["seb"] = "http://twitter.com/statuses/user_timeline/159616305.rss";
		comptes_url["vincent"] = "http://twitter.com/statuses/user_timeline/99956217.rss";
		comptes_url["pci_labs"] = "http://twitter.com/statuses/user_timeline/230989022.rss";
		
		// Si on trouve une équivalence, on attribue la valeur nécessaire
		for (var compte_url in comptes_url)
		{
			if (compte_url == name_final) url = comptes_url[compte_url];
		}
		
		// On effectue la requête
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.onreadystatechange=function()
		{
			// si la requête est OK
			if(xmlhttp.readyState==4)
			{
				// Si la réponse n'est pas vide
				if(!xmlhttp.responseText=="")
				{
					// On récupère le résultat final
					var result = get_twitter_timeline(xmlhttp.responseXML);
					
					// On affiche le résultat final
					document.getElementById("contenu").innerHTML = result;

					// On met le résultat en cache, en fon du nom indiqué
					window.localStorage.setItem('twitter_' + name_final + '_cache', result);
					
					// On enregistre l'heure
					var cache_time = new Date();
					window.localStorage.setItem('twitter_' + name_final + '_cache_time', cache_time.getTime());

				}
			}
			else 
			{
				// Sinon on affiche le texte de chargement
				document.getElementById("contenu").innerHTML = charg_text;
			}
		}
		
		// On envoie la requête, ici, on attend le résultat afin de pouvoir l'envoyer, d'où le "false"
		xmlhttp.open("GET",url,true);
		xmlhttp.send("");
	}
	// Sinon, on affiche la version en cache
	else document.getElementById("contenu").innerHTML = window.localStorage.getItem('twitter_' + name_final + '_cache');
}